Voorbeeld van de instructie Event

Het volgende voorbeeld gebruikt gebeurtenissen om seconden af te tellen tijdens een demonstratie van de snelste wedstrijd over 100 meter. De programmacode illustreert alle methoden, eigenschappen en instructies die met de gebeurtenissen te maken hebben, inclusief de instructie Event.

De klasse die een gebeurtenis oproept, is de gebeurtenisbron en de klassen die de gebeurtenis implementeren, zijn de signaalopvangers. Een gebeurtenisbron kan meerdere signaalopvangers hebben voor de gebeurtenissen die door die bron worden gegenereerd. Als de klasse de gebeurtenis oproept, wordt die gebeurtenis voor elke klasse opgeroepen die gebeurtenissen voor dat exemplaar van het object ontvangt.

Het voorbeeld maakt gebruik van een formulier (Form1) met een knop (Command1), een label (Label1) en twee tekstvakken (Text1 en Text2). Als u op de knop klikt, verschijnt in het eerste tekstvak "Vanaf nu" en worden in het tweede tekstvak seconden geteld. Als de tijd (9,84 seconden) helemaal is verstreken, verschijnt in het eerste tekstvak "Tot nu" en staat de secondenteller op "9,84"

De programmacode voor Formulier1 geeft de begin- en eindstatus van het formulier op. De code bevat ook de programmacode die wordt uitgevoerd als gebeurtenissen worden opgeroepen.

Option Explicit

Private WithEvents mText As TimerState

Private Sub Opdracht1_Click()
Text1.Text = "Vanaf nu"
    Text1.Refresh
    Text2.Text = "0"
    Text2.Refresh
Call mText.TimerTask(9,84)
End Sub

Private Sub Form_Load()
    Opdracht1.Caption = "Klik om de timer te starten"
    Text1.Text = ""
    Text2.Text = ""
    Label1.Caption = "De snelste 100 meter duurde maar zo lang:"
    Set mText = New TimerState
    End Sub

Private Sub mText_ChangeText()
    Text1.Text = "Tot nu"
    Text2.Text = "9,84"
End Sub

Private Sub mText_UpdateTime(ByVal dblJump As Double)
    Text2.Text = Str(Format(dblJump, "0"))
    DoEvents
End Sub

De resterende programmacode staat in een klassenmodule met de naam TimerState. De instructies Event declareren de procedures die worden gestart als gebeurtenissen worden opgeroepen.

Option Explicit
Public Event UpdateTime(ByVal dblJump As Double)
Public Event ChangeText()

Public Sub TimerTask(ByVal Duration As Double)
    Dim dblStart As Double
    Dim dblSecond As Double
    Dim dblSoFar As Double
    dblStart = Timer
    dblSoFar = dblStart
    
    Do While Timer < dblStart + Duration
        If Timer - dblSoFar >= 1 Then
      dblSoFar = dblSoFar + 1
      RaiseEvent UpdateTime(Timer - dblStart)
        End If
    Loop
    
    RaiseEvent ChangeText
    
End Sub